package com.zhonglian.elisa.utils;

import android.content.Context;
import android.content.ContextWrapper;
import android.content.res.Configuration;
import android.content.res.Resources;
import android.os.Build;
import android.os.LocaleList;
import android.util.DisplayMetrics;
import android.util.Log;

import java.util.Locale;

/**
 * Created : Yx
 * Time : 2020/4/21 11:22
 * Describe :语言切换思密达
 *   language_name.setText(name);//选择的类型
 *   //如果选择的语言与当前语言一致 则不操作
 *   int locale = LanguagesUtils.getLanguage();
 *   if (index != locale) {
 *       //重启登录
 *       LanguagesUtils.saveLanguage(index);
 *       AppManager.getAppManager().finishAllActivity();
 *       startActivity(new Intent(this, MainActivity.class));
 *   }
 */
public class LanguagesUtils {
    private static final String LOCALE = "locale";/*0 中文  1外语*/

    /*保存语言设置*/
    public static void saveLanguage(int locale) {
        SPUtils.put(LOCALE, locale);
    }

    /*获得语言设置*/
    public static int getLanguage() {
        return (int) SPUtils.get(LOCALE, 0);
    }

    /* 选择语言然后存储locale,（经测试Application设置语言不起作用）
     * 6.0：在BaseActivity的 onCreate()方法中调用或在每个Activity中调用 才能起作用！其他地方无效！
     * */
    public static void setLanguage6_0(Context context) {
        /**/
        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.N) {//小于7.0才调用
            int locale = getLanguage();
            Locale locale1 = Locale.CHINESE;
            if (locale == 0) {
                locale1 = Locale.SIMPLIFIED_CHINESE;//简体中文
            } else if (locale == 1) {
                //locale1 = new Locale("mn");//蒙古国语
                locale1 = Locale.US;//美国
            }
            //如果文件夹的范文小于代码中的Locale的范围，那么程序调用的是默认value文件夹下的strings.xml
            Resources resources = context.getResources();
            Configuration configuration = resources.getConfiguration();//获得系统配置
            DisplayMetrics dm = resources.getDisplayMetrics();

            //7.0以下 6.0这种跟随系统语言，如果系统简体中文则加载values中内容，如果系统为美国英语则加载en-rUS中内容
            if (locale == 0) {
                locale1 = Locale.CHINESE;//values中对应的中文母语
            } else if (locale == 1) {
                //locale1 = new Locale("mn");//蒙古国语
                locale1 = Locale.US;//美国
            }
            configuration.locale = locale1;
            resources.updateConfiguration(configuration, dm);
            Log.i("aaaa", "6.0设置语言" + locale);
        }
    }


    /* 选择语言然后存储locale,（经测试Application设置语言不起作用）
     * 7.0：在BaseActivity的 void attachBaseContext()附加帮助上下文方法中设置语言 super.attachBaseContext(LanguagesUtils.setLanguage(newBase));
     * 或在BaseActivity的 onCreate()方法中调用即在每个Activity中调用
     * */
    public static ContextWrapper setLanguage7_0(Context context) {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {//大于等于7.0才调用，支持多语言，APP会寻找与系统设置的第一语言最匹配的资源
            int locale = getLanguage();
            Locale locale1 = Locale.CHINESE;
            if (locale == 0) {
                locale1 = Locale.SIMPLIFIED_CHINESE;//简体中文
            } else if (locale == 1) {
                //locale1 = new Locale("mn");//蒙古国语
                locale1 = Locale.US;//美国
            }
            //如果文件夹的范文小于代码中的Locale的范围，那么程序调用的是默认value文件夹下的strings.xml
            Resources resources = context.getResources();
            Configuration configuration = resources.getConfiguration();//获得系统配置
            DisplayMetrics dm = resources.getDisplayMetrics();

            //高于24 = 7.0
            configuration.setLocale(locale1);
            LocaleList localeList = new LocaleList(locale1);
            LocaleList.setDefault(localeList);
            configuration.setLocales(localeList);
            context = context.createConfigurationContext(configuration);
            resources.updateConfiguration(configuration, dm);
            Log.i("aaaa", "7.0设置语言" + locale);
        }
        return new ContextWrapper(context);
    }

    /* 总结性方法：在BaseActivity的 onCreate()方法中调用！
     * 选择语言然后存储locale,（经测试Application设置语言不起作用）
     * 6.0：在BaseActivity的 onCreate()方法中调用或在每个Activity中调用 才能起作用！其他地方无效！
     * 7.0：在BaseActivity的 void attachBaseContext()附加帮助上下文方法中设置语言 super.attachBaseContext(LanguagesUtils.setLanguage(newBase));
     *   或 在BaseActivity的 onCreate()方法中调用即在每个Activity中调用
     * */
    public static ContextWrapper setLanguage(Context context) {
        int locale = getLanguage();
        Locale locale1 = Locale.CHINESE;
        if (locale == 0) {
            locale1 = Locale.SIMPLIFIED_CHINESE;//简体中文
        } else if (locale == 1) {
            //locale1 = new Locale("mn");//蒙古国语
            locale1 = Locale.US;//美国
        }
        //如果文件夹的范文小于代码中的Locale的范围，那么程序调用的是默认value文件夹下的strings.xml
        Resources resources = context.getResources();
        Configuration configuration = resources.getConfiguration();//获得系统配置
        DisplayMetrics dm = resources.getDisplayMetrics();
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {//大于等于7.0才调用，支持多语言，APP会寻找与系统设置的第一语言最匹配的资源
            //高于24 = 7.0
            configuration.setLocale(locale1);
            LocaleList localeList = new LocaleList(locale1);
            LocaleList.setDefault(localeList);
            configuration.setLocales(localeList);
            context = context.createConfigurationContext(configuration);
            resources.updateConfiguration(configuration, dm);
            Log.i("aaaa", "7.0设置语言" + locale);
        } else {
            //7.0以下 6.0这种跟随系统语言，如果系统简体中文则加载values中内容，如果系统为美国英语则加载en-rUS中内容
            if (locale == 0) {
                locale1 = Locale.CHINESE;//values中对应的中文母语
            } else if (locale == 1) {
                //locale1 = new Locale("mn");//蒙古国语
                locale1 = Locale.US;//美国
            }
            configuration.locale = locale1;
            resources.updateConfiguration(configuration, dm);
            Log.i("aaaa", "6.0设置语言" + locale);
        }
        return new ContextWrapper(context);
    }

}
